package cn.lasse.springframework.aop;

import cn.lasse.springframework.util.ClassUtils;

/**
 * 被代理的目标对象
 * 是一个目标对象，在目标对象类中提供 Object 入参属性，以及获取目标类 TargetClass 信息。
 *
 * @author Lasse
 */
public class TargetSource {

    private final Object target;

    public Object getTarget() {
        return this.target;
    }

    public TargetSource(Object target) {
        this.target = target;
    }

    public Class<?>[] getTargetClass() {
        Class<?> clazz = this.target.getClass();
        clazz = ClassUtils.isCglibProxyClass(clazz) ? clazz.getSuperclass() : clazz;
        Class<?>[] interfaces = clazz.getInterfaces();
        return interfaces;
    }

}
